package com.fh.shop.api.util;

import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisPool {

    private RedisPool() {
        System.out.println("============init");
    }

    private static JedisPool jedisPool;
    private static void initPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 连接池中的最大连接
        jedisPoolConfig.setMaxTotal(1000);
        // 空闲时候，连接池中的最大连接
        jedisPoolConfig.setMaxIdle(500);
        // 空闲时候，连接池中的最小连接
        jedisPoolConfig.setMinIdle(500);
        // 获取连接的时候，验证连接是否可用
        jedisPoolConfig.setTestOnBorrow(true);
        // 归还连接的时候，验证连接是否可用
        jedisPoolConfig.setTestOnReturn(true);

        jedisPool = new JedisPool(jedisPoolConfig, "192.168.58.160", 7026);
    }

    // 静态块
    // 咱们通过static静态块来保证单例，保证只创建一个连接池
    // static静态块只有在 类加载 的时候被调动
    // 类只会被加载一次【无论你 new多少次，实例化多少次，类只会被加载一次】
    static {
        System.out.println("加载类...");
        initPool();
    }

    public static Jedis getConnection() {
        return jedisPool.getResource();
    }
}
